package com.hspedu.encap;

import java.util.Scanner;

public class Encapsulation01 {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("小杨 123456879");
        person.setAge(21);
        person.setSalary(6000);
        System.out.println(person.info());

        //如果我们直接使用构造器指定属性
        System.out.println("smithi的信息");
        Person smith = new Person("smith", 130, 7000);
        System.out.println(smith.info());

    }
}

/*
1. 不能随便查看人的年龄,工资等隐私，并对设置的年龄进行合理的验证。
   年龄合理就设置，否则给默认 年龄, 必须在 1-120
2. 工资不能直接查看，name 的长度在 2-6 字符 之间
 */

class Person{
    public String name;
    private int age;//年龄 私有化
    private double salary;

    //构造器
    public Person() {

    }

    //有三个属性的构造器
    public Person(String name, int age, double salary) {
//        this.name = name;
//        this.age = age;
//        this.salary = salary;
        //我们可以将set方法写在构造器中，这样仍然可以验证
        setName(name);
        setAge(age);
        setSalary(salary);
    }

    //自己写setXxx getXxx 太慢，使用快捷键 -> alt + inset -> getter and setter
   //然后根据要求来完善我们的代码
    public String getName() {
        return name;
    }

    public void setName(String name) {
        //加入业务逻辑，对数据进行校验
        if(name.length()>=2 && name.length() <=6){
            this.name = name;
        }else{
            System.out.println("名字的长度应在 2~6 个字符之间");
            this.name = "无名人";
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age >= 1 && age<=120){
            this.age = age;
        }else{
            System.out.println("你设置的年龄不对，需在(1~120),给默认年龄18");
            this.age = 18; //给的一个默认年龄
        }

    }

    public double getSalary() {
        //可以对当前对象的权限判断
        Scanner scanner = new Scanner(System.in);
        int password = 123456;
        if( password == 123456){
            return salary;
        }else{
            System.out.println("输入的密码有误，无法查看");
            return 0;
        }
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    //写一个方法，返回属性信息
    public String info(){
        return "info name=" + name + " age=" + age + " salary=" + salary;
    }
}